#include "terrain.h"

//initialisation, parametrage et libération

/**
@brief initialise le terrain à 0
**/
void initTerrain (Terrain *t)
{
	t->dimXTerrain = 0;
	t->dimYTerrain = 0;
	initTabDyn(&(t->tab));
}

/**
@brief rempli la structure terrain
**/
void parametreTerrain (Terrain *t, int dimX, int dimY)
{
    setdimXTerrain(t,dimX);
    setdimYTerrain(t,dimY);

}

/**
@brief libere la structure terrain
**/

void libereTerrain (Terrain *t)
{
	assert(t!=NULL);
	libereTabDyn(&(t->tab));
}


//asseceurs
int getdimXTerrain(const Terrain *t)
{
	assert(t!=NULL);
	return t->dimXTerrain;
}
int getdimYTerrain(const Terrain *t)
{
	assert(t!=NULL);
	return t->dimYTerrain;
}

TableauDynamique *getTableauDynamiqueTerrain (Terrain *t)
{
    assert(t!=NULL);
    return &(t->tab);
}

//mutateurs
void setdimXTerrain(Terrain *t, int dimX)
{
	assert (t!=NULL);
	assert (dimX>=0);
   	t->dimXTerrain= dimX;
}
void setdimYTerrain(Terrain *t, int dimY)
{
	assert (t!=NULL);
	assert (dimY>=0);
   	t->dimYTerrain= dimY;
}

TableauDynamique *setTableauDynamiqueTerrain (Terrain *t)
{
    assert(t!=NULL);
    return &(t->tab);
}

//Manipulation du terrain

/**
@brief Permet d'ajouter un equipement en donnant toutes ses valeurs lors de l'appel de la fonction
**/

void ajouterEquipementTerrainEnParametrant(Terrain *t,int idEquipement, int dimX, int dimY, int posX, int posY, int degats, int protection)
{
    Equipement eqTemp;   //eqTemp sert juste à paramétrer un equipement, puis on le copie dans le tableau dynamique
    parametreEquipement (&eqTemp,idEquipement, dimX, dimY, posX, posY, degats, protection);
    ajouterElementTabDyn(&(t->tab),&eqTemp);
}

void ajouterEquipementTerrain(Terrain *t, Equipement *eq)
{
    ajouterElementTabDyn(&(t->tab),eq);
}


//Test de non-régression
void testRegressionTerrain()
{
    printf("###  Test du module terrain ### \n");

	Terrain terrain; // terrain alloué dans la pile
    Terrain* terrain2=malloc(sizeof(terrain)); //terrain alloué dans le tas

	//test des fonctions d'initialisation
    initTerrain (&terrain);
    initTerrain (terrain2);

    printf("-- Fonctions d'initialisation testees avec succes -- \n");

	//test des accesseurs et mutateurs
	assert ((getdimXTerrain(&terrain)) == 0);
	assert((getdimYTerrain(&terrain)) == 0);

	setdimXTerrain(&terrain, 20);
	setdimYTerrain(&terrain, 20);

	assert ((getdimXTerrain(&terrain)) == 20);
	assert((getdimYTerrain(&terrain)) == 20);

	printf("-- Accesseurs et mutateurs testes avec succes  -- \n");

	//test de la fonction parametreTerrain
	parametreTerrain(&terrain, 100, 100);
	assert ((getdimXTerrain(&terrain)) == 100);
	assert((getdimYTerrain(&terrain)) == 100);

    printf("-- Fonction de parametrage testee avec succes -- \n");


	//test de la fonction de libération
	libereTerrain(&terrain);
	libereTerrain (terrain2);
	free(terrain2);

	printf("-- Fonction de liberation testee avec succes  -- \n");

    printf("***  Test du module terrain realise avec succes *** \n\n\n");
}



